#!/usr/bin/python
# -*- coding:utf-8 -*-
# @author  : micah
# @time    :  
# @function: 
# @version :


from collections.abc import Iterator


class MyList:
    def __init__(self):
        self.items = list()

    def add(self, value):
        self.items.append(value)

    def __iter__(self):
        # 在iter方法中需要返回一个迭代器的实例
        my_iterator = MyIterator(self)
        return my_iterator


class MyIterator(object):
    def __init__(self, my_list):  # my_list接收的是MyList类的实例
        self.my_list = my_list
        # 计数器
        self.current = 0

    def __iter__(self):
        return self  # 当前迭代器类自身就是一个迭代器，所以返回这个类本身的实例就可以

    # 手动实现迭代规则
    def __next__(self):
        if self.current < len(self.my_list.items):
            item = self.my_list.items[self.current]
            # 获取到列表元素后加1
            self.current += 1
            return item
        else:
            # 可以自己抛出一个异常
            # for循环如果可以接收到这个异常之后会自动break
            raise StopIteration


my_list = MyList()
for i in range(5):
    my_list.add(i)

for item in my_list:
    print(item)
